package com.bml.architect.base;

import com.bml.architect.utils.MqConstants;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;
import org.apache.rocketmq.remoting.exception.RemotingException;

import java.io.UnsupportedEncodingException;

/**
 * 单向发送
 */
public class OnWayProducer {

    public static void main(String[] args) throws MQClientException, UnsupportedEncodingException, RemotingException, InterruptedException {

        DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName");
        producer.setNamesrvAddr(MqConstants.getNameServerAddr());
        producer.start();
        System.out.println("rocketmq连接成功...");
        //发送消息
        for (int i = 0; i < 10; i++) {
            /**
             * 第一个参数：主题，每一个消息都有一个主题，这个主题可以是事先创建好的主题，也可以自动创建，但是需要配置
             * 参数
             * 第二个参数：消息的TAG，Tag的作用可以让消费者监听感兴趣的tag，也就是用于消息过滤使用
             * 第三个参数：消息的key，通过key进行归类
             * 第四个参数：消息的内容主体
             */

            Message message = new Message("TopicTest", "TagA", "simplekey11", ("hello rocketmq ,my name is " + i).getBytes(RemotingHelper.DEFAULT_CHARSET));
            /**
             * 单向（Oneway）发送特点为只负责发送消息，不等待服务器回应且没有回调函数触发，
             * 即只发送请求不等待应答。此方式发送消息的过程耗时非常短，一般在微秒级别。
             *
             * 应用场景：适用于某些耗时非常短，但对可靠性要求并不高的场景，例如日志收集
             */
            producer.sendOneway(message);
            System.out.println(i);
        }
        System.out.println("消息发送完毕");
        producer.shutdown();

    }
}
